/**
 * Fichier Db4oDaoEnseignant.java : Définition de classe
 * fr.unice.gnpt.core.dao.db4o.Db4oDaoEnseignant : Fabrique de DAO de type
 * Enseignant pour DB4O
 * 
 * Auteurs : Groupe GNPT : Gastinel, Nicolas, Pellegrino, Trovato
 */
package fr.unice.gnpt.core.dao.db4o;

import java.util.List;

import com.db4o.query.Predicate;

import fr.unice.gnpt.core.Enseignant;
import fr.unice.gnpt.core.dao.DaoEnseignant;
import fr.unice.gnpt.core.dao.DaoException;

/**
 * Classe de gestion de DAO de type Enseignant pour DB4O.
 * 
 * @author gnpt
 * @version 0.1.4
 */
public class Db4oDaoEnseignant extends Db4oDaoGenerique<Enseignant, Long>
		implements DaoEnseignant {

	/**
	 * Constructeur par défaut.
	 * 
	 * @param nomFichierBdd
	 *            nom du fichier de bdd à passer au DAO afin de pouvoir ouvrir
	 *            une connexion.
	 */
	public Db4oDaoEnseignant(String nomFichierBdd) {
		super(Enseignant.class, nomFichierBdd);
	}

	/**
	 * @throws DaoException
	 * @see fr.unice.gnpt.core.dao.DaoEnseignant#findByNomPrenom(java.lang.String,
	 *      java.lang.String)
	 */
	@Override
	public Enseignant findByNomPrenom(final String nom, final String prenom)
			throws DaoException {
		try {
			Predicate<Enseignant> predicat = new Predicate<Enseignant>() {
				private static final long serialVersionUID = 1L;

				@Override
				public boolean match(Enseignant e) {
					return e.getNom().equalsIgnoreCase(nom)
							&& e.getPrenom().equalsIgnoreCase(prenom);
				}
			};
			List<Enseignant> enseignants = this.getConnexion().getConnexion()
					.query(predicat);

			if (enseignants.size() == 0)
				return null;

			return enseignants.get(0);
		} catch (Exception e) {
			throw new DaoException(
					"Erreur lors de la requête findByNomPrenom DB4O.", e);
		}
	}
}
